package com.doudou.collection.service;

import com.doudou.collection.pojo.dto.*;
import com.doudou.collection.response.ResultVO;

/**
 * className: UserService<br>
 * description: 用户业务逻辑类<br>
 * author: 李浩文<br>
 * date: 2023/6/2 17:42<br>
 * version: 1.0<br>
 */
public interface UserService {

    /**
     * 用户登录业务逻辑(用户名登陆)
     */
    ResultVO loginByUsername(String username, String password);

    /**
     * 用户登录业务逻辑(邮箱登陆)
     */
    ResultVO loginByEmail(String email, String password);

    /**
     * 用户登录业务逻辑(手机号登陆)
     */
    ResultVO loginByPhone(String phone, String password);

    /**
     * 用户登录业务逻辑(手机验证码登陆)
     */
    ResultVO loginByPhoneAndCode(String phone, String code);

    /**
     * 用户登录业务逻辑(邮箱验证码登陆)
     */
    ResultVO loginByEmailAndCode(String email, String code);

    /**
     * 用户注册业务逻辑(用户名密码注册)
     */
    ResultVO addNewByUsername(String username, String password);

    /**
     * 用户注册业务逻辑(邮箱密码注册)
     */
    ResultVO addNewByEmail(String email, String password);

    /**
     * 用户注册业务逻辑(手机号密码注册)
     */
    ResultVO addNewByPhone(String phone, String password);

    /**
     * 用户注册业务逻辑(手机号验证码注册)
     */
    ResultVO addNewByPhoneAndCode(String phone, String code);

    /**
     * 用户注册业务逻辑(邮箱验证码注册)
     */
    ResultVO addNewByEmailAndCode(String email, String code);

    /**
     * 用户更新修改个人详情信息
     */
    void updateUserDetailById(UserDetailDTO userDetailDTO);

    /**
     * 发送手机验证码
     */
    ResultVO sendCodeToPhone(String phone);

    /**
     * 发送邮箱验证码
     */
    ResultVO sendCodeToEmail(String email);

    /**
     * 通过id修改用户名的业务逻辑
     */
    ResultVO updateUsernameById(UserUpdateNameDTO userUpdateNameDTO);

    /**
     * 通过id修改密码的业务逻辑
     */
    ResultVO updatePasswordById(UserUpdatePwdDTO userUpdatePwdDTO);

    /**
     * 通过id修改email的业务逻辑
     */
    ResultVO updateEmailById(UserUpdateEmailDTO userUpdateEmailDTO);

    /**
     * 通过id修改手机的业务逻辑
     */
    ResultVO updatePhoneById(UserUpdatePhoneDTO userUpdatePhoneDTO);
}
